#pragma once

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>

typedef int Heapdatatype;

typedef struct Heap
{
	int* a;
	int size;
	int capacity;
}Heap;

void AdjustUp(Heapdatatype* a, int child);
void AdjustDown(Heapdatatype* a, int parent, int size);
void Swap(Heapdatatype* e1, Heapdatatype* e2);



void HeapInit(Heap* php);
void HeapDestroy(Heap* php);

void HeapPush(Heap* php, Heapdatatype x);
void HeapPop(Heap* php);

Heapdatatype HeapTop(Heap* php);
int HeapSize(Heap* php);
bool HeapEmpty(Heap* php);


void HeapSort(Heapdatatype* a,int size);
void TopK(Heapdatatype* a,int size,int k);